package net.ufrog.common.spring.exception;

import net.ufrog.common.Result;
import net.ufrog.common.exception.NotSignException;
import net.ufrog.common.utils.Strings;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.View;

/**
 * @author ultrafrog, ufrog.net@gmail.com
 * @version 0.1, 2017-02-04
 * @since 0.1
 */
public class NotSignExceptionHandler implements ExceptionHandler<NotSignException> {

    /** 登录视图 */
    private String view;

    /** 登录地址 */
    private String uri;

    /** 登录前缀 */
    private String prefix;

    /** 构造函数 */
    public NotSignExceptionHandler() {}

    /**
     * 构造函数
     *
     * @param view 登录视图
     * @param uri 登录地址
     * @param prefix 登录前缀
     */
    public NotSignExceptionHandler(String view, String uri, String prefix) {
        this();
        this.view = view;
        this.uri = uri;
        this.prefix = prefix;
    }

    @Override
    public Boolean isType(Exception e) {
        return e.getClass() == NotSignException.class;
    }

    @Override
    public ModelAndView handle(NotSignException e, String requestType, String errorView, String partViewSuffix, View jsonView, ExceptionLogger exceptionLogger) {
        String data = Strings.equals(ExceptionResolver.REQUEST_TYPE_JSON, requestType) ? getPrefix() + (getUri().startsWith("/") ? "" : "/") + getUri() : null;
        Result<String> rString = Result.failure("");
        return ExceptionResolver.modelAndView(requestType, getView(), partViewSuffix, jsonView, ExceptionResolver.KEY_MODEL_EXCEPTION, rString.setData(data));
    }

    /**
     * 读取登录视图
     *
     * @return 登录视图
     */
    public String getView() {
        return view;
    }

    /**
     * 设置登录视图
     *
     * @param view 登录视图
     */
    public void setView(String view) {
        this.view = view;
    }

    /**
     * 读取登录地址
     *
     * @return 登录地址
     */
    public String getUri() {
        return uri;
    }

    /**
     * 设置登录地址
     *
     * @param uri 登录地址
     */
    public void setUri(String uri) {
        this.uri = uri;
    }

    /**
     * 读取登录前缀
     *
     * @return 登录前缀
     */
    public String getPrefix() {
        return prefix;
    }

    /**
     * 设置登录前缀
     *
     * @param prefix 登录前缀
     */
    public void setPrefix(String prefix) {
        this.prefix = prefix;
    }
}
